package com.itheima.springbootwebbtalis.controller;

import com.itheima.springbootwebbtalis.pojo.ClazzQueryParam;
import com.itheima.springbootwebbtalis.pojo.PageResult;
import com.itheima.springbootwebbtalis.pojo.Result;
import com.itheima.springbootwebbtalis.service.ClazzService;
import com.itheima.springbootwebbtalis.pojo.Clazz;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/clazzs")
public class ClazzController {
    @Autowired
    private ClazzService clazzService;
    //定义处理器方法添加教室信息
    //路径：/clazzs
    //请求方式：POST
    @PostMapping
    public Result add(@RequestBody Clazz clazz){
        log.info("请求参数：{}",clazz);
        clazzService.classServiceImplAdd(clazz);
        //封装处理器对象 返回值类型：Result
        return Result.success();
    }
    // 定义处理器方法;查询所有班级信息
    // 请求路径 clazzs/list
    // 请求方式 GET
    // 请求参数 无
    @GetMapping("/list")
    public Result showAll(){
        log.info("请求参数：无");
        List<Clazz> clazzes = clazzService.ServiceShowAll();
        log.info("响应结果：{}",clazzes);
        return  Result.success(clazzes);
    }
    // 定义处理器方法：根据id查询班级信息
    // 请求路径 /clazzs/{id}
    // 请求方式：Get
    @GetMapping("/{id}")
    public Result showById(@PathVariable Integer id){
        log.info("请求参数：{}",id);
        // 请求参数：id 路径请求方式
        // 响应数据：Result
        Clazz clazz = clazzService.ServiceShowById(id);
        log.info("响应结果：{}",clazz);
        return Result.success(clazz);
    }
    // 定义处理器方法：删除班级
    // 请求路劲 /clazzs/{id}
    // 请求方式：DELETE
    // 请求参数 路径参数：id
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id){
        log.info("请求参数：{}",id);
        clazzService.serviceDelete(id);
        return Result.success();
    }
    // 响应数据：Result

    // 定义处理器方法：修改班级
    // 请求路劲：/clazzs
    // 请求方式：put
    // 请求参数:json id,name,room,beginDate,endDate,masterId
    @PutMapping
    public Result update(@RequestBody Clazz clazz){
        log.info("请求参数：{}",clazz);
        clazzService.ServiceUpdate(clazz);
        return Result.success();
    }
    // 定义处理器方法：班级列表查询 分页查询
    //请求路径：/clazzs
    //请求方式：get
    //请求参数：kv page分页查询页面必填 pageSize每页显示条数 必填
    @GetMapping
    public Result page(ClazzQueryParam param){
        log.info("分页查询参数：{}",param);
        PageResult clazzes =clazzService.page(param);
        return  Result.success(clazzes);
    }
    // 请求数据样例：/clazzs?name=java&begin=2023-01-01&end=2023-06-30&page=1&pageSize=5
}
